#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <pthread.h>
#include <stdlib.h>

// volatile int quit = 0;

// void handler(int signo){
//     printf("change quit from 0 to 1\n");
//     quit = 1;
//     printf("quit: %d\n", quit);
// }

// int main(){
//     signal(2, handler);
//     while(!quit);
//     printf("main quit\n");
//     return 0;
// }

pid_t id;

void waitProcess(int signo){
    printf("捕捉到一个信号:%d, id:%d\n", signo, getpid());
    sleep(5);

    while(1){
        pid_t res = waitpid(-1, NULL, WNOHANG);
        if(res > 0){
            printf("wait success, res:%d, id:%d\n", res, getpid());
        }
        else
            break;
    }
    printf("done\n");
}

int main(){
    signal(SIGCHLD,waitProcess);
    
    int i = 1;
    for(; i <= 10; i++){
        id = fork();
        if(id == 0){
            int cnt = 5;
            while(cnt){
                printf("子进程, pid:%d, ppid:%d\n", getpid(), getppid());
                sleep(1);
                cnt--;
            }

            exit(1);
        }
    }

    while(1){
        sleep(1);
    }

    return 0;
}